home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 February: Technology Seed / Mac Tech Seed Feb '97.toast / OpenDoc 1.2b2c1 / Implementation / Memory / MemHooks.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-13  |  3.1 KB  |  113 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        MemHooks.h
  3.  
  4.     Contains:    Memory manager hook classes for debugging
  5.  
  6.     Owned by:    Michael Burbidge
  7.     Owned by:    Jens Alfke
  8.  
  9.     Copyright:    © 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  10.  
  11.     Change History (most recent first):
  12.  
  13.          <2>     9/13/96    jpa        1371387: Speed optimizations.
  14.          <6>      8/4/95    DM        Leak checking [1267956]
  15.          <5>      5/4/95    jpa        Added AboutToAllocate.
  16.          <4>    10/24/94    jpa        Constness [1194286].
  17.          <3>     9/14/94    jpa        Eliminated dependencies on rest of OpenDoc.
  18.                                     [1186692]
  19.          <2>      8/8/94    jpa        Added private BasicAboutToFree
  20.          <1>     7/26/94    jpa        first checked in
  21.     To Do:
  22.         
  23. */
  24.  
  25.  
  26. #ifndef _MEMHOOKS_
  27. #define _MEMHOOKS_
  28.  
  29. #if MM_DEBUG
  30.  
  31. #ifndef _MEMHOOK_
  32. #include "MemHook.h"
  33. #endif
  34.  
  35. #ifndef _MEMORYHE_
  36. //#include "MemoryHe.h"
  37. #endif
  38.  
  39.  
  40. //==============================================================================
  41. // CBlockCushionHook - A debugging memory hook which places a prefix and a
  42. //                       suffix on each block. When the block is freed both are
  43. //                       validated to make sure they have not been overwritten.
  44. //
  45. //                        Block format:    PPPPXXXXPPPP...SSSS where XXXX is the
  46. //                                                            block size.
  47. //
  48. //==============================================================================
  49.  
  50. class CBlockCushionHook : public ODMemoryHook
  51. {
  52. public:
  53.     CBlockCushionHook();
  54.     virtual ~CBlockCushionHook();
  55.     
  56.     virtual ODBlockSize GetHeaderSize();
  57.  
  58.     virtual ODBlockSize AboutToAllocate(ODBlockSize size) const;
  59.     virtual void* DidAllocate(void* blk, ODBlockSize);
  60.     virtual const void* AboutToBlockSize(const void* blk);
  61.     virtual void* AboutToFree(void* blk);
  62.     virtual void AboutToRealloc(void*& , ODBlockSize&);
  63.     virtual void* DidRealloc(void* oldBlk, void* blk, ODBlockSize);
  64.  
  65.     enum{ kHookType = 1 };
  66.     virtual long GetType( ) const            {return kHookType;}
  67.     
  68.     ODBlockSize GetBlockSize( const void* blk ) const;
  69.  
  70. private:
  71.     unsigned long* BasicAboutToFree(void* blk, mmboolean zap);
  72.     
  73.     enum { kPrefixCushionLength = 3 * sizeof(unsigned long),
  74.            kSuffixCushionLength = sizeof(unsigned long) };
  75.     enum { kPrefixCushionMagicNumber = 'PPPP',
  76.            kSuffixCushionMagicNumber = 'SSSS' };
  77. };
  78.  
  79.  
  80. //==============================================================================
  81. // CBlockStackCrawlHook - A debugging memory hook that tags every block with the
  82. //                          stack crawl as of the time it was created.
  83. //==============================================================================
  84.  
  85. class StackCrawl;
  86.  
  87. class CBlockStackCrawlHook : public ODMemoryHook
  88. {
  89. public:
  90.     virtual ODBlockSize GetHeaderSize();
  91.  
  92.     virtual ODBlockSize AboutToAllocate(ODBlockSize size) const;
  93.     virtual void* DidAllocate(void* blk, ODBlockSize);
  94.     virtual const void* AboutToBlockSize(const void* blk);
  95.     virtual void* AboutToFree(void* blk);
  96.     virtual void AboutToRealloc(void*& , ODBlockSize&);
  97.     virtual void* DidRealloc(void* oldBlk, void* blk, ODBlockSize);
  98.     enum{ kHookType = 2 };
  99.     virtual long GetType( ) const            {return kHookType;}
  100.     
  101.             StackCrawl* GetStackCrawl( const void *blk ) const;
  102.             void        SetStackCrawl( const void *blk, StackCrawl* );
  103.     
  104.     static mmboolean gTrack;
  105.     
  106. private:
  107.             void* BasicAboutToFree(void* blk, mmboolean zap);
  108. };
  109.  
  110.  
  111. #endif /*MM_DEBUG*/
  112.  
  113. #endif /*_MEMHOOKS_*/